package cn.zhfeat.hatch.web.utils;

import cn.zhfeat.core.shiro.ShiroSessionData;
import cn.zhfeat.core.shiro.bean.ShiroSysAuthorityBean;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

import java.util.ArrayList;
import java.util.List;


/**
 * @description: 从Session中获取用户的数据权限、菜单权限等
 * 		1、拿到当前用户对应的session
 * 		2、从session中按规则取出数据，提供给sps使用
 * 		ShiroSessionData shiroSessionData = ShiroSessionDataUtil.getShiroSessionData();
 * 		dto.setShiroSessionData(shiroSessionData);
 *		dto.setCid(shiroSessionData.getCid()); 
 *
 *
 * @author ZhangHao
 * @date 2018年5月14日 下午4:30:38 
 * @version 1.0.0.1
 */
public class ShiroSessionDataUtil{
	
	
	/**
	 * @description: 从当前会话中获取用户绑定的相关信息，封装到对象
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月16日 下午3:36:38 
	 * @version 1.0.0.1
	 */
	public static ShiroSessionData getShiroSessionData() {
		
        //获取shiro - subject对象
        Subject subject = SecurityUtils.getSubject();
        Session session = subject.getSession();
    	ShiroSessionData sessionDataEntity = new ShiroSessionData();
        //用户ID
        if(session != null && session.getAttribute("sessionUserData") != null) {
        	
        	String sessionUserData = String.valueOf(session.getAttribute("sessionUserData"));
        	JSONObject sessionUserDataObj = JSONObject.parseObject(sessionUserData);
        	//用户ID
        	sessionDataEntity.setUserId(sessionUserDataObj.getLong("userId"));
        	//用户登录账号
        	sessionDataEntity.setUserAccount(sessionUserDataObj.getString("userAccount"));
        	//用户姓名
        	sessionDataEntity.setUserName(sessionUserDataObj.getString("userName"));
        	//用户选择协议的状态0：不同意(默认) 1：同意
        	sessionDataEntity.setAgreement(sessionUserDataObj.getInteger("agreement"));
        	//用户对应的一组角色名称
        	sessionDataEntity.setRoleNames(sessionUserDataObj.getString("roleNames"));
        	//用户对应的一组菜单权限
        	JSONArray authsArr = sessionUserDataObj.getJSONArray("auths");
        	List<ShiroSysAuthorityBean> auths = new ArrayList<ShiroSysAuthorityBean>();
            for (Object jsonObject : authsArr) {
            	ShiroSysAuthorityBean authsbean = JSONObject.parseObject(jsonObject.toString(), ShiroSysAuthorityBean.class);
            	auths.add(authsbean);
            } 
            sessionDataEntity.setAuths(auths);
        	//用户公司
        	sessionDataEntity.setCid(sessionUserDataObj.getLong("cid"));
        	//用户所属门店
        	sessionDataEntity.setBelongStoreId(sessionUserDataObj.getLong("belongStoreId"));
        	//用户所属部门
        	sessionDataEntity.setBelongDepartmentId(sessionUserDataObj.getLong("belongDepartmentId"));
        	//用户所属部门名称
        	sessionDataEntity.setBelongStoreName(sessionUserDataObj.getString("belongStoreName"));
        	//用户所属门店名称
        	sessionDataEntity.setBelongDepartmentName(sessionUserDataObj.getString("belongDepartmentName"));
        	//用户身份
        	sessionDataEntity.setDataIdentity(sessionUserDataObj.getInteger("dataIdentity"));

			//用户负责的一组部门
        	String responsibleDepartmentIds = sessionUserDataObj.getString("responsibleDepartmentIds");
			//用户负责的一组门店
        	String responsibleStoreIds = sessionUserDataObj.getString("responsibleStoreIds");
			//用户负责的一组用户
        	String responsibleUserIds = sessionUserDataObj.getString("responsibleUserIds");
			//绑定用户负责的一组部门
        	if(responsibleDepartmentIds != null){
				sessionDataEntity.setResponsibleDepartmentIds(responsibleDepartmentIds);
				sessionDataEntity.setResponsibleDepartmentIdsArr(responsibleDepartmentIds.split(","));
			}
			//绑定用户负责的一组门店
			if(responsibleStoreIds != null){
				sessionDataEntity.setResponsibleStoreIds(responsibleStoreIds);
				sessionDataEntity.setResponsibleStoreIdsArr(responsibleStoreIds.split(","));
			}
			//绑定用户负责的一组用户
        	if(responsibleUserIds != null){
				sessionDataEntity.setResponsibleUserIds(responsibleUserIds);
				sessionDataEntity.setResponsibleUserIdsArr(responsibleUserIds.split(","));
			}

			//用户所属企业是否进行了微信授权
			sessionDataEntity.setWechatAuth(sessionUserDataObj.getInteger("wechatAuth"));

        }
        
		return sessionDataEntity;
	}
	

}














